package com.hsc.offer.str;

/**
 * @author
 * @date 2025-06-07 剑指offer系列
 * @Description 2.请实现一个函数，将一个字符串中的每个空格替换成“%20”。例如，当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
 */
public class SwordFingers2 {
    public static void main(String[] args) {
        String string = replaceSpace2(new StringBuffer("We Are Happy"));
        System.out.println(string);
    }

    /**
     * 笔试快速完成的情况
     *
     * @param str
     * @return
     */
    public static String replaceSpace(StringBuffer str) {
        // 直接调用现成的api进行替换
        return str.toString().replaceAll(" ", "%20");
    }

    /**
     * 面试的情况
     *
     * @param str
     * @return
     */
    public static String replaceSpace2(StringBuffer str) {
        // 组装成一个新字符串返回 为什么*3呢 因为空格替换成%20 最坏的情况 就是每个空格替换成%20 我们对每个空格替换后的长度是3
        char[] chars = new char[str.length() * 3];
        // 设定一个索引下标
        int index = 0;
        // 逐个遍历
        for (int i = 0; i < str.length(); i++) {
            // 如果当前字符不为空格 将字符元素放到容器中
            if (str.charAt(i) != ' ') {
                chars[index] = str.charAt(i);
                index++;
            } else {
                // 如果当前字符是空格
                chars[index] = '%';
                chars[index + 1] = '2';
                chars[index + 2] = '0';
                // 容器占位+3
                index += 3;
            }
            // 继续往下去找
            // 占用三个元素进行替换
        }
        // 我们创建的数组 只需要有效的  长度 去掉后面长度返回
        return new String(chars, 0, index);

    }
}
